package org.example.filter;

/**
 * 过滤器的执行流程：
 * 过滤器当中我们拦截到了请求之后，如果希望继续访问后面的web资源，就要执行放行操作，放行就是调用 FilterChain对象当中的doFilter()方法，
 * 在调用doFilter()这个方法之前所编写的代码属于放行之前的逻辑。
 * 在放行后访问完 web 资源之后还会回到过滤器当中，回到过滤器之后如有需求还可以执行放行之后的逻辑，放行之后的逻辑我们写在doFilter()这行代码之后。
 * 放行前 -> 放行 -> 资源 -> 放行后
 * 过滤器的拦截路径配置：
 * 拦截具体路径:/login(只有访问 /login 路径时，才会被拦截)
 * 目录拦截:/emps/*(访问/emps下的所有资源，都会被拦截)
 * 拦截所有:/*(访问所有资源，都会被拦截)
 * 过滤器链:项目中多个过器会形成一个过滤器链
 * 过滤器链上过滤器的执行顺序：注解配置的Filter，优先级是按照过滤器类名（字符串）的自然排序。 比如：
 * - AbcFilter
 * - DemoFilter
 * 这两个过滤器来说，AbcFilter 会先执行，DemoFilter会后执行。
 */
/*@WebFilter(urlPatterns = "/*")//拦截所有请求
@Slf4j
public class DemoFilter implements Filter {
    //拦截到请求之后执行的方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("DemoFilter 拦截到请求");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }
//初始化方法，在服务器启动时执行一次
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("DemoFilter 初始化");
    }
//销毁方法，在服务器关闭时执行一次
    @Override
    public void destroy() {
        log.info("DemoFilter 销毁");
    }
}*/
